/**
 * 管理用户状态
 * 状态改变后回调结果
 */
// const sdk = require('../sdk/index.js')
import sdk from '@/sdk/index'
import sessionServ from '@/serv/sessionService'

class MemberService {

  constructor() {
    this._member = null
    this._loginedCallback = [] // 可以让客户端注册 登陆回调
    // 设置 sdk 的 错误回调
    sdk.regErrHanlder({
      errCode: 'token_is_invalid',
      action: (err, params) => {
        // 可能有多个请求出现token失效，此时只有一个请求登陆即可，控制不让别的也进入登陆操作
        if (sdk.token) {
          // 重新登陆之前 清空 token
          sdk.token = null
          // 重新登陆
          this.login()
        }
        // 任何状态下 的token失效都被放入重新请求队列
        if(params)
          sdk.fetch(params) // 失败的请求重新请求！
      }
    })
  }
  //属性
  get memberInfo(){
    return this._member
  }
  // 注册登陆回调
  regLoginedCallback(cb){
    this._loginedCallback.push(cb)
  }
  // 登陆
  login() {
    let params={}
    // 查看是否登录过,mi 是member info的意思
    let sess = sessionServ.session
    console.log('所以，sess是什么-----',sess)
    if(sess){
      params.code = sess.token
    }
    sdk.fetch({
      api: '/core/authorize/browserLogin',
      data: params,
      success: res2 => {
        sdk.token = res2.token // 很关键的一步,这一步可以让 延迟的 请求 重新激活
        // 保存下 token
        sessionServ.session = res2 // 不关心是string 还是object
        this.getSelfInfo()
        // 处理 回调
        if(this._loginedCallback.length>0)
          this._loginedCallback.forEach(fun=>{
            fun(res2)
          })
        this._loginedCallback.splice(0, this._loginedCallback.length)
      }
    })
  }
  getSelfInfo(){
    sdk.fetch({
      api: '/core/user/getSelfInfo',
      success: res => {
        console.log('获取当前账户——————', res)
        //保存到全局memberInfo
        this._member = res
      },
      fail: err => {
        console.log(err)
        if (res.errMsg) {
          wx.showModal({
            title: '获取信息失败',
            content: res.errMsg,
          })
        }
      }
    })
  }
}

export default new MemberService()
